/**
 * ***************************************************************************** Copyright (c) 2000,
 * 2008 IBM Corporation and others. All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0 which accompanies this
 * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * <p>Contributors: IBM Corporation - initial API and implementation
 * *****************************************************************************
 */
package org.eclipse.jdt.internal.corext.refactoring.typeconstraints;

public interface ITypeConstraintFactory {

  public ITypeConstraint[] createSubtypeConstraint(ConstraintVariable v1, ConstraintVariable v2);

  public ITypeConstraint[] createEqualsConstraint(ConstraintVariable v1, ConstraintVariable v2);

  public ITypeConstraint[] createDefinesConstraint(ConstraintVariable v1, ConstraintVariable v2);

  public ITypeConstraint[] createStrictSubtypeConstraint(
      ConstraintVariable v1, ConstraintVariable v2);

  public CompositeOrTypeConstraint createCompositeOrTypeConstraint(ITypeConstraint[] constraints);

  /**
   * Allows for avoiding the creation of SimpleTypeConstraints based on properties of their
   * constituent ConstraintVariables and ConstraintOperators. Can be used to e.g. avoid creation of
   * constraints for assignments between built-in types.
   *
   * @param v1
   * @param v2
   * @param operator
   * @return whether the constraint should <em>not</em> be created
   */
  public boolean filter(ConstraintVariable v1, ConstraintVariable v2, ConstraintOperator operator);
}
